/*
文件的两种读取方法,1:从命令行直接读取输入单独的"n"结束输入 2:从命令行指定的文件读取
并最终汇总所有的重复行输入
 */
package main

import (
	"os"
	"bufio"
	"fmt"
)

func main() {
	counts := make(map[string]int)
	files := os.Args[1:]

	/*
	命令行没有带参数,默认从命令行读取文件
	命令行带参数,从参数指定的文件中读取
	*/
	if len(files) == 0 {
		countLines(os.Stdin, counts)
	} else {
		for _, v := range files {
			f, err := os.Open(v)
			if err != nil {
				fmt.Fprintf(os.Stderr, "dup2:%v\n", err)
				continue;
			}
			countLines(f, counts)
			f.Close()
		}
	}

	for k, v := range counts {
		fmt.Println(k, "---", v)
	}
}

func countLines(f *os.File, counts map[string]int) {
	input := bufio.NewScanner(f)

	for input.Scan() {
		if input.Text() == "n" {
			break
		}
		counts[input.Text()]++
	}
}

